package com.xiaogao.common.utils.tree;

import java.lang.String;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TreeUtils {
    /**
     * 将平铺的 List<T> 转换为树结构
     *
     * @param flatList 扁平化的列表
     * @param <T>      需要实现 TreeNode 接口的类型
     * @return 树结构根节点的列表
     */
    public static <T extends TreeNode<T>> List<T> convertToTree(List<T> flatList) {
        Map<String, T> nodeMap = new HashMap<>();
        List<T> rootNodes = new ArrayList<>();

        // 初始化所有节点到 Map 中
        for (T node : flatList) {
            nodeMap.put(node.getId(), node);
        }

        // 构建树结构
        for (T node : flatList) {
            String parentId = node.getParentId();
            if (parentId == null || "0".equals(parentId)) {
                // 是根节点
                rootNodes.add(node);
            } else {
                // 将子节点添加到父节点的 children 中
                T parentNode = nodeMap.get(parentId);
                if (parentNode != null) {
                    parentNode.getChildren().add(node);
                }
            }
        }

        return rootNodes;
    }
}
